package cn.iocoder.yudao.module.erp.dal.mysql.customerinfo;

import java.util.*;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.erp.dal.dataobject.customeraccount.CustomerAccountDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.customerinfo.CustomerInfoDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.finance.ErpAccountDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseInItemDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.erp.controller.admin.customerinfo.vo.*;
import org.apache.ibatis.annotations.Param;

/**
 * 客户信息 Mapper
 *
 * @author mhc
 */
@Mapper
public interface CustomerInfoMapper extends BaseMapperX<CustomerInfoDO> {


    @TenantIgnore
    int updateThisAccount(@Param("customerAccountDO")CustomerAccountDO customerAccountDO);
    default PageResult<CustomerInfoDO> selectAccountPage(CustomerInfoPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<CustomerInfoDO>()
                .likeIfPresent(CustomerInfoDO::getName, reqVO.getName())
                .likeIfPresent(CustomerInfoDO::getContact, reqVO.getContact())
                .likeIfPresent(CustomerInfoDO::getMobile, reqVO.getMobile())
                .likeIfPresent(CustomerInfoDO::getTelephone, reqVO.getTelephone())
                .likeIfPresent(CustomerInfoDO::getEmail, reqVO.getEmail())
                .likeIfPresent(CustomerInfoDO::getFax, reqVO.getFax())
                .eqIfPresent(CustomerInfoDO::getStatus, reqVO.getStatus())
                        .eqIfPresent(CustomerInfoDO::getId, reqVO.getId())
                .orderByAsc(CustomerInfoDO::getSort));
               /* .orderByAsc((o) -> "ABS(" + o.getNowCount() + ")"))*/
    }

    default PageResult<CustomerInfoDO> selectPage(CustomerInfoPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<CustomerInfoDO>()
                .likeIfPresent(CustomerInfoDO::getName, reqVO.getName())
                .likeIfPresent(CustomerInfoDO::getContact, reqVO.getContact())
                .likeIfPresent(CustomerInfoDO::getMobile, reqVO.getMobile())
                .likeIfPresent(CustomerInfoDO::getTelephone, reqVO.getTelephone())
                .likeIfPresent(CustomerInfoDO::getEmail, reqVO.getEmail())
                .likeIfPresent(CustomerInfoDO::getFax, reqVO.getFax())
                .eqIfPresent(CustomerInfoDO::getStatus, reqVO.getStatus())
                .eqIfPresent(CustomerInfoDO::getId, reqVO.getId())
                .orderByAsc(CustomerInfoDO::getSort));
    }

    default List<CustomerInfoDO> selectListByStatus(Integer status) {
        return selectList(CustomerInfoDO::getStatus, status);
    }

    default List<CustomerInfoDO> selectListByInIds(Collection<Long> inIds) {
        return selectList(CustomerInfoDO::getId, inIds);
    }


}